package main

import "fmt"

// 引出接口的实例

// 接口的定义
// 1.接口是一种类型
// 2.不用担心下一个变量是什么类型,我只关心能调用它的什么方法

type speaker interface {
	speak() //只要实现了speak方法的变量，都是speaker 类型
}

type cat struct{}
type dog struct{}
type person struct{}

func (p person) speak() {
	fmt.Println("嗷嗷嗷～")
}

func (c cat) speak() {
	fmt.Println("喵喵喵～")
}

func (d dog) speak() {

	fmt.Println("汪汪汪～")
}

func da(x speaker) {
	// 接收一个参数,传进来什么,我就打什么
	x.speak() //挨了打,就要叫
}

func main() {

	var dog dog
	var cat cat
	var person person
	da(dog)
	da(cat)
	da(person)
}
